草庐IT

Java Swingworker 和多线程

全部标签

c++ - 模板函数在作为线程调用时不会编译

我有一个与模板函数和线程相关的问题:templatevoidThreader(TYPE_sizecounter){counter++;}intmain(){unsignedintcounter=100;threadone(Threader,counter);one.join();cout这不会编译;我得到:error:nomatchingfunctionforcalltoâstd::thread::thread(,unsignedint&)â如果我删除它编译的模板,如果我将函数调用更改为标准函数调用而不是线程(仍然使用模板)它编译。谁知道这是为什么?我使用的是Centos564位。er

c++ - 等待 C++ 11 线程实际启动

C++11线程创建后如何等到启动?它似乎没有任何方法,不像其他一些线程库(如Qt)提供了一种特殊方法来检查线程是否正在运行。 最佳答案 语言定义要求新线程在构造函数返回之前已经启动。形式上,这是[thread.thread.constr]/5:“构造函数调用的完成与f拷贝调用的开始同步。” 关于c++-等待C++11线程实际启动,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/18

c++ - 保护主线程免受工作线程中的错误

当使用posix线程时,是否有一些方法可以“保护”主线程免受工作线程引起的错误(例如取消引用的空指针、被零除等)的影响。“工作线程”是指由pthread_create()创建的posix线程。不幸的是,我们不能使用异常——所以没有“catch”等。这是我的测试程序(C++):void*workerThreadFunc(void*threadId){int*a=NULL;*a=5;//Error(segmentationfault)pthread_exit(NULL);}intmain(){cout在上面的例子中,workerThread引起的错误会终止整个程序。但是尽管有这个错误,我还

QT使用多线程的方式实现UDP的接收

使用多线程的方式,实现UDP数据的接收,并将接收到的UDP数据打印到textEdit当中。今天这个demo主要是使用socket绑定一个固定的IP个端口接收UDP数据,使用moveToThread的方式将UDP的接收放到子线程里面。废话不多说,直接开始:步骤1:界面设计,这里其实只需要绑定自己的IP和接收端口就好了,我主要是想要后面接着利用这个demo写其他的东西,所以就多添加了写组件,注意要添加一个textEdit来显示接收到的数据。步骤二:创建一个ReceiveClass.cpp和ReceiveClass.h来实现咱们的UDP接收class:ReceiveClass.h#ifndefREC

c++ - 线程模型和类实例内存管理

假设我们在堆栈中创建了一个类的实例。我知道编译器会根据该实例中字段的类型和数量为其提供特定数量的内存。但是我对实例方法感到困惑。我假设他们有自己的堆栈框架。我不明白的地方:实例方法的栈帧在哪里?它们位于实例堆栈框架内还是存储在其他地方?是否只为类的多个实例创建了一个实例方法栈帧如果是这样,那么如果同一个类的两个对象同时从不同线程调用同一个函数怎么办? 最佳答案 与普通函数一样,C++中的成员函数也有多block内存。首先,是组成成员函数的实际汇编指令,它们通常放在代码段中,无需担心。其次,每次调用该成员函数时,都会为该调用内部的所有

javascript - 从多线程 C++ 插件回调 NodeJS Javascript 函数

我有一个执行一些后台处理的多线程C++插件,我需要让它定期回调到我在NodeJS服务器中编写的Javascript函数。我知道这涉及使用uv_async_send(),因为它需要在主线程中执行,但到目前为止我还没有弄清楚如何去做。有没有我错过的简单示例? 最佳答案 最后,一旦我理解了uv_*函数的作用,这就不是太难了:1)在插件中公开一个函数以允许Node设置将定期回调的Javascriptcb到:Callback*cbPeriodic;//keepcbPeriodicsomewhereNAN_METHOD(setPeriodicC

c++ - 停止阻塞在 recv() 上的接收器线程

我有一个聊天应用程序,它有一个单独的线程来监听传入的消息。while(mainthreadnotcallingforreceivertoquit){stringmessage=tcpCon.tcpReceive();//Reliesontherecv()functionprocessIncomingMessage(message);}这种工作方式有一个大问题。大多数时候,循环将阻塞在recv()上,因此接收线程不会退出。在几秒钟后不强制线程终止的情况下,解决此问题的正确方法是什么? 最佳答案 使用shutdown()关闭套接字,为所

c++ - c++11在另一个线程中提前生成随机数

对于C++中的一些数值模拟,我需要生成许多具有指数分布的随机数(都具有相同的预定分布)。目前,我的程序运行良好,但超过50%的CPU时间花在了生成这些随机数上。我想做的是以不阻塞模拟主循环的方式生成这些随机数。更准确地说,我想要一个线程,它的工作是始终保持一个随机数“提前准备好”,并在有人读取这个随机数时立即生成一个新的随机数。有人知道这样做的好方法吗?目前,我的顺序代码如下所示:#include#include#includeusingnamespacestd;//exponentialrandomvariablewithparameterlambdaclassEXPGenerato

Python:使用线程池轻松处理多线程

要使用线程池来处理队列中的多个任务,可以使用Python的concurrent.futures模块中的ThreadPoolExecutor类。ThreadPoolExecutor提供了一个方便的接口,可以将任务提交到线程池中执行。以下是一个示例,展示如何使用线程池处理队列中的多个任务:importconcurrent.futures#模拟的任务函数deftask_function(task):print(f"Processingtask:{task}")#创建线程池withconcurrent.futures.ThreadPoolExecutor()asexecutor:#创建一个任务队列ta

c++ - 线程中的堆栈大小在 C++ 中定义了什么?

我在我的源代码中使用C++和Windows.h。我在MSDN中阅读了CreateThreadAPI,但我仍然不明白指定堆栈大小的本质。默认情况下为1MB。但是如果我指定32字节会发生什么?线程中的堆栈大小定义了什么?请提供详尽的解释,我将不胜感激。谢谢。 最佳答案 栈用来存放局部变量,函数调用中传递参数,存放返回地址。线程的栈有一个固定的大小,它是在创建线程时确定的。这也是您所指的值(value)。堆栈大小是在创建线程时确定的,因为它需要占用连续的地址空间。这意味着线程堆栈的整个地址空间必须在创建线程时保留。如果堆栈太小,它可能会溢